/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package mrp.web;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;
import mrp.beans.UnidadMedidaBean;
import mrp.entity.UnidadMedida;
import org.primefaces.component.dialog.Dialog;
import org.primefaces.component.inputtext.InputText;

/**
 *
 * @author root
 */
@ManagedBean(name="unidadmedidaWeb")
@SessionScoped
public class UnidadMedidaWeb implements Serializable{
    
    @ManagedProperty("#{unidadmedida}")
    private UnidadMedidaBean unidadmedida;
    
    //_______________________________________________________________________________________________ 
    //----------------------------Componentes de ingreso--------------------------------
        private InputText textCodUnidadMedida;
        private InputText textNombreUniMedida;
        private InputText textAbreviatura;
    
    //----------------------------Componentes de consulta--------------------------------
    //Atributos para cargar la tabla
        private List <UnidadMedida> tablaDatosUnidadMedida;
        private List <String> datosUnidadMedidaSeleccionado;
        private UnidadMedida unidadMedidaSeleccionado; 
    
    //-----------------Componentes modificarDatos-----------------------    
        private UnidadMedida unidadMedidaActualizarDatos;
    //-----------------fin Componentes modificarDatos----------------------- 
    
    //_______________________________________________________________________________________________  
    //********************metodos Getters and Setters***************************

    public UnidadMedidaBean getUnidadmedida() {
        return unidadmedida;
    }

    public void setUnidadmedida(UnidadMedidaBean unidadmedida) {
        this.unidadmedida = unidadmedida;
    }
    
    //-----------------Getters and Setters ingresar ---------------------------

    public InputText getTextAbreviatura() {
        return textAbreviatura;
    }

    public void setTextAbreviatura(InputText textAbreviatura) {
        this.textAbreviatura = textAbreviatura;
    }

    public InputText getTextCodUnidadMedida() {
        return textCodUnidadMedida;
    }

    public void setTextCodUnidadMedida(InputText textCodUnidadMedida) {
        this.textCodUnidadMedida = textCodUnidadMedida;
    }

    public InputText getTextNombreUniMedida() {
        return textNombreUniMedida;
    }

    public void setTextNombreUniMedida(InputText textNombreUniMedida) {
        this.textNombreUniMedida = textNombreUniMedida;
    }
    //-----------------Fin Getters and Setters ingresar ---------------------------

    //-----------------Getters and Setters consultar ---------------------------     

    public List<String> getDatosUnidadMedidaSeleccionado() {
        return datosUnidadMedidaSeleccionado;
    }

    public void setDatosUnidadMedidaSeleccionado(List<String> datosUnidadMedidaSeleccionado) {
        this.datosUnidadMedidaSeleccionado = datosUnidadMedidaSeleccionado;
    }

    public List<UnidadMedida> getTablaDatosUnidadMedida() {
        return tablaDatosUnidadMedida;
    }

    public void setTablaDatosUnidadMedida(List<UnidadMedida> tablaDatosUnidadMedida) {
        this.tablaDatosUnidadMedida = tablaDatosUnidadMedida;
    }

    public UnidadMedida getUnidadMedidaSeleccionado() {
        return unidadMedidaSeleccionado;
    }

    public void setUnidadMedidaSeleccionado(UnidadMedida unidadMedidaSeleccionado) {
        this.unidadMedidaSeleccionado = unidadMedidaSeleccionado;
    }
    //-----------------fin Getters and Setters consultar --------------------------- 

    //-----------------Getters and Setters modificar ---------------------------   

    public UnidadMedida getUnidadMedidaActualizarDatos() {
        return unidadMedidaActualizarDatos;
    }

    public void setUnidadMedidaActualizarDatos(UnidadMedida unidadMedidaActualizarDatos) {
        this.unidadMedidaActualizarDatos = unidadMedidaActualizarDatos;
    }
    //-----------------Fin Getters and Setters modificar ---------------------------

   //_______________________________________________________________________________________________    
   //*********************Metodos generales************************  
    public void setImputText(String form, String [] componente)// setea los imputText de vistas 
   {
       javax.faces.context.FacesContext facesContext = javax.faces.context.FacesContext.getCurrentInstance();
      
       javax.faces.component.UIViewRoot root = facesContext.getViewRoot();

       this.setTextCodUnidadMedida((InputText)root.findComponent(form).findComponent(componente[0]));
       this.setTextNombreUniMedida((InputText)root.findComponent(form).findComponent(componente[1]));                            
       this.setTextAbreviatura((InputText)root.findComponent(form).findComponent(componente[2]));                            
    }
    public void resetComponentes()
    {        
        try{                  
            this.getTextCodUnidadMedida().setValue("");
            this.getTextNombreUniMedida().setValue("");  
            this.getTextAbreviatura().setValue("");
        }
        catch(java.lang.NullPointerException npe)
        {
            System.out.println("-------------Excepcion en resetComponentes() "+npe);
        }
        System.out.println("-------------borrar datos");
    }  
    private List<String> getEstilosTodosComponentes(String metodo)
    {
        List<String>listaComponentesEstilos=new ArrayList<String>();
        if(metodo.equals("ingresarUnidadMedida")||metodo.equals("modificarUnidadMedida"))
        {
            listaComponentesEstilos.add(" width: 150px; font-size: 12px;left: 124px; top: 20px; position: absolute  ");
            listaComponentesEstilos.add(" width: 235px; font-size: 12px;left: 124px; top: 50px; position: absolute ");                      
            listaComponentesEstilos.add(" width: 150px; font-size: 12px;left: 124px; top: 80px; position: absolute ");                      
        }
      
        return listaComponentesEstilos;
    }
    private void setEstilosTodosComponentes(List<String>listaComponentesEstilos, String metodo)
    {
        if(metodo.equals("ingresarUnidadMedida")||metodo.equals("modificarUnidadMedida"))
        {
            this.getTextCodUnidadMedida().setStyle(listaComponentesEstilos.get(0).toString());
            this.getTextNombreUniMedida().setStyle(listaComponentesEstilos.get(1).toString());  
            this.getTextAbreviatura().setStyle(listaComponentesEstilos.get(2).toString());  
        }                       
    }
    public boolean esCamposVacios(List<Object>listaComponentes, String metodo)
    {
        boolean vacio=false;
        
        if(metodo.equals("ingresarUnidadMedida")||metodo.equals("modificarUnidadMedida"))
        {
            List<String>listaComponentesEstilos=this.getEstilosTodosComponentes(metodo);
            for(int i=1;i<listaComponentes.size();i++) // empieza en 1 porque el campo numeroLista se genera automaticamente al almacenar en la base de datos un nuevo registro
            {
                boolean isEmpty=true;
                try{
                    isEmpty=((InputText)listaComponentes.get(i)).getValue().toString().isEmpty(); 
                    if(i==1)
                    {
                        String str=((InputText)listaComponentes.get(i)).getValue().toString().trim();
                        if(!((!(str.matches("[a-zA-Z ]*")))==false))
                        {
                            isEmpty=true;
                            this.getUnidadmedida().mostrarMensaje("error", "Error: El nombre de unidad de medida solamente se permite el ingreso de letras", "");
                        }
                    }
                }
                catch(java.lang.NullPointerException npe){
                    isEmpty=true;
                }
                if(isEmpty)
                {
                    ((InputText)listaComponentes.get(i)).setStyle(listaComponentesEstilos.get(i)+";border-color: crimson");
                    vacio=true;
                   
                    javax.faces.context.FacesContext facesContext = javax.faces.context.FacesContext.getCurrentInstance();
      
                    javax.faces.component.UIViewRoot root = facesContext.getViewRoot();
                    
                    if(metodo.equals("ingresarUnidadMedida"))
                    {
                        this.mostrarDialogo("formDialogoIngresarUnidadMedida", "DialogoIngresarUnidadMedida", true);                        
                    }
                    else if(metodo.equals("modificarUnidadMedida"))
                    {
                        this.mostrarDialogo("formDialogoModificarUnidadMedida", "DialogoModificarUnidadMedida", true);                        
                    }
                }
            }
        }        
        return vacio;
    }
   public void mostrarDialogo(String form, String componente, boolean visible)
   {
       javax.faces.context.FacesContext facesContext = javax.faces.context.FacesContext.getCurrentInstance();
       javax.faces.component.UIViewRoot root = facesContext.getViewRoot();
       Dialog dialogo=(Dialog)root.findComponent(form).findComponent(componente);
       dialogo.setVisible(visible);
   }
  //_______________________________________________________________________________________________               

//*********************Metodos ingresar ***********************
   public void clicBotonResetearIngresarUnidadMedida()
   {
       String form="formDialogoIngresarUnidadMedida";
       String[] componentes={"textCodUnidadMedida","textNombreUnidadMedida","textTamanioUnidadMedida"};     
       this.setImputText(form, componentes);
       String metodo="ingresarUnidadMedida";
       this.setEstilosTodosComponentes(this.getEstilosTodosComponentes(metodo), metodo);       
       this.resetComponentes();
   }
   public void clicBotonIngresarUnidadMedida() ///boton guardar UnidadMedida
   {
       String form="formDialogoIngresarUnidadMedida";
       String[] componentes={"textCodUnidadMedida","textNombreUniMedida","textAbreviatura"};       
       this.setImputText(form,componentes);//obtiene los datos de la vista web y los carga en los imputtext de esta clase
       
       String metodo="ingresarUnidadMedida";
       List<Object>listaComponentes=new ArrayList<Object>();
        
       listaComponentes.add( this.getTextCodUnidadMedida());
       listaComponentes.add( this.getTextNombreUniMedida());                   
       listaComponentes.add( this.getTextAbreviatura());
       
       List<String>listaComponentesEstilos=this.getEstilosTodosComponentes(metodo);
       this.setEstilosTodosComponentes(listaComponentesEstilos,metodo);
       //System.out.println("List<String>listaComponentesEstilos----- "+listaComponentesEstilos.get(0));
       if(!this.esCamposVacios(listaComponentes,metodo))
       {           
           this.getUnidadmedida().setUnidadmedida(new UnidadMedida(-1,this.getTextNombreUniMedida().getValue().toString().trim().toUpperCase(),
                                                                   this.getTextAbreviatura().getValue().toString().trim()));
            if(this.getUnidadmedida().ingresarUnidadMedida())
            {
                this.resetComponentes();
                this.mostrarDialogo("formDialogoIngresarUnidadMedida", "DialogoIngresarUnidadMedida", false);
                this.buscarUnidadMedida();
            }               
       }
       else
       {
           this.getUnidadmedida().mostrarMensaje("error", "Error: Datos requeridos deben ser llenados", "");           
       }
   }          
   //*********************fin Metodos ingresar ************************
   
   //*********************    Metodos consultar ************************
   public void buscarUnidadMedida()
   {
        List <List> datos=this.getUnidadmedida().consultarUnidadMedida();
        this.setTablaDatosUnidadMedida(datos.get(0));            
   }
   public void mostrarDatosDialogoDatosUnidadMedida()
   {
        UnidadMedida um=(UnidadMedida)this.getUnidadMedidaSeleccionado();
        List<String> datos=new ArrayList<String>();
        datos.add("Codigo Unidad de Medida:"+um.getCodUnidadMedida());
        datos.add("       Unidad de Medida:"+um.getNombreUniMedida());
        datos.add("            Abreviatura:"+um.getAbreviatura());
        
        this.setDatosUnidadMedidaSeleccionado(datos);  
       
   }
   public void eventoFilaSeleccionadaTablaConsultarUnidadMedida() 
   {//metodo carga los datos del ultimo UnidadMedida seleccionado en el caso que se deseen actualizar
       UnidadMedida um=(UnidadMedida)this.getUnidadMedidaSeleccionado();      
       this.setUnidadMedidaActualizarDatos(um);       
       System.out.println("eventoFilaSeleccionadaTablaConsultarUnidadMedida "+um.getCodUnidadMedida());
   }
   //********************* fin Metodos consultar ************************
   
   //*********************    Metodos modificar ************************
   public void clicBotonModificarUnidadMedida() //boton del toolbar
   {
       String form="formDialogoModificarUnidadMedida";
       String[] componentes={"textCodUnidadMedidaModificar","textNombreUniMedidaModificar","textAbreviaturaModificar"};       
       this.setImputText(form,componentes);//obtiene los datos de la vista web y los carga en los imputtext de esta clase
       
       String metodo="modificarUnidadMedida";
       List<Object>listaComponentes=new ArrayList<Object>();
        
       listaComponentes.add( this.getTextCodUnidadMedida());
       listaComponentes.add( this.getTextNombreUniMedida());                   
       listaComponentes.add( this.getTextAbreviatura());
       
//       List<String>listaComponentesEstilos=this.getEstilosTodosComponentes(metodo);
//       this.setEstilosTodosComponentes(listaComponentesEstilos,metodo);
       this.getTextCodUnidadMedida().setValue(this.getUnidadMedidaActualizarDatos().getCodUnidadMedida());
       this.getTextNombreUniMedida().setValue(this.getUnidadMedidaActualizarDatos().getNombreUniMedida());
       this.getTextAbreviatura().setValue(this.getUnidadMedidaActualizarDatos().getAbreviatura());
   }
   public void clicBotonActualizarDatosUnidadMedida()
   {
       String form="formDialogoModificarUnidadMedida";
       String[] componentes={"textCodUnidadMedidaModificar","textNombreUniMedidaModificar","textAbreviaturaModificar"};       
       this.setImputText(form,componentes);//obtiene los datos de la vista web y los carga en los imputtext de esta clase
       
       String metodo="modificarUnidadMedida";
       List<Object>listaComponentes=new ArrayList<Object>();
        
       listaComponentes.add( this.getTextCodUnidadMedida());
       listaComponentes.add( this.getTextNombreUniMedida());                   
       listaComponentes.add( this.getTextAbreviatura());
      
       List<String>listaComponentesEstilos=this.getEstilosTodosComponentes(metodo);
       this.setEstilosTodosComponentes(listaComponentesEstilos,metodo);
       if(!this.esCamposVacios(listaComponentes,metodo))
       {
           
           this.unidadmedida.setUnidadmedida(new UnidadMedida(Integer.parseInt(this.getTextCodUnidadMedida().getValue().toString()),
                                                            this.getTextNombreUniMedida().getValue().toString().trim().toUpperCase(),
                                                            this.getTextAbreviatura().getValue().toString().trim()));
            System.out.println("--------______Componentes no vacios");    
            if(this.unidadmedida.modificarUnidadMedida())
            {
                this.mostrarDialogo("formDialogoModificarUnidadMedida", "DialogoModificarUnidadMedida", false);
                this.resetComponentes();
                this.buscarUnidadMedida();
            }            
       }
       else
       {
           this.unidadmedida.mostrarMensaje("error", "Error: Datos requeridos deben ser llenados", "");          
       }
   } 
   //********************* fin Metodos modificar ************************
   
   //*************************Metodos eliminar  **************************
   public void clicBotonEliminarUnidadMedida()
    {
        System.out.println("clicBotonEliminarUnidadMedida UnidadMedida para Eliminar: "+this.getUnidadMedidaActualizarDatos().getCodUnidadMedida());
        String datosUnidadMedidaEliminar=""+this.getUnidadMedidaActualizarDatos().getNombreUniMedida();
        if(this.unidadmedida.eliminarUnidadMedida(""+this.getUnidadMedidaActualizarDatos().getCodUnidadMedida()))
        {
            this.unidadmedida.mostrarMensaje("info", "Se ha eliminado Unidad de Medida: "+datosUnidadMedidaEliminar,"");
            this.buscarUnidadMedida();//recarga la tabla de datos de UnidadMedida
            System.out.println("Unidad de Medida Eliminado: "+datosUnidadMedidaEliminar);
        }
        else
        {
            this.unidadmedida.mostrarMensaje("error", "No se pudo eliminar Unidad de Medida: " +datosUnidadMedidaEliminar,"");
             System.out.println("No se pudo eliminar UnidadMedida: "+datosUnidadMedidaEliminar);
        }
    }
   //*************************fin eliminar **************************
}